// signal_send.c
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void sigHandler(int signum, siginfo_t *info, void *context) {
    printf("Received signal: %d, value: %d\n", signum, info->si_int);
}

int main() {
    struct sigaction act;
    sigemptyset(&act.sa_mask);
    act.sa_sigaction = sigHandler;
    act.sa_flags = SA_SIGINFO;
    sigaction(SIGUSR1, &act, NULL);
    pid_t pid = fork();
    if (pid == 0) {
        sleep(1);
        kill(getppid(), SIGUSR1); // 使用kill发送信号
        raise(SIGUSR1); // 使用raise发送信号
        union sigval value;
        value.sival_int = 123;
        sigqueue(getppid(), SIGUSR1, value); // 使用sigqueue发送信号
        exit(0);
    } else {
        while (1) {
            sleep(1);
        }
    }
    return 0;
}
